In [1]:
import numpy as np
import json
import pickle
import plotly.graph_objects as go
import plotly.io as pio
import pandas as pd
import itertools
from matplotlib import path
import numpy as np
import os
from matplotlib import path
import json
geoData=json.load(open('bezirksgrenzen.geojson'))
regionsPDict={}
for i in range(len(geoData['features'])):
    tmpDf=pd.DataFrame(data=geoData['features'][i]['geometry']['coordinates'][0][0],columns=['lon','lat'])
    region_id=int(geoData['features'][i]['properties']['Gemeinde_schluessel'])
    tmpDf['region_id']=region_id
    tmpDf['region_name']=geoData['features'][i]['properties']['Gemeinde_name']
    if i==0:
        regionsDF=tmpDf
    else:
        regionsDF=pd.concat([regionsDF,tmpDf])
        
    regionsPDict[region_id]=path.Path(geoData['features'][i]['geometry']['coordinates'][0][0])
    

regions=regionsDF.groupby('region_id').mean()

connectivityG=np.load('berlin/connectivityG.npy')

for i in range(connectivityG.shape[0]):
    for j in range(i+1,connectivityG.shape[0]):
        connectivityG[j,i]=connectivityG[i,j]
    
conArgSort=connectivityG.argsort(axis=1)
#print(conArgSort)
graphD={i+1:row[-3:-1]+1 for i,row in enumerate(conArgSort)}
graphV={i+1:connectivityG[i,row[-3:-1]] for i,row in enumerate(conArgSort)}

maxEdge=max([max(graphV[k]) for k in graphD.keys()])
minEdge=min([min(graphV[k]) for k in graphD.keys() if k!=3])
scaleD=maxEdge-minEdge
lineLon=[]
lineLat=[]
lineL={}
for i in range(1,13):
    lineL[i]=[]
    for k,j in enumerate(graphD[i]):
        lineL[i].append([[regions.loc[i,'lon'],regions.loc[j,'lon']],
                    [regions.loc[i,'lat'],regions.loc[j,'lat']],
                    (graphV[i][k]-minEdge)/scaleD])
        #print(i,k,j,(graphV[i][k]-minEdge)/scaleD)


mapbox_access_token="pk.eyJ1IjoibWRraGF0YW1pIiwiYSI6ImNqc2Q3MDBlZzBjdTYzeXRsbmtuN2JmYTAifQ.DmiQnVUdDKAV2G2uZppE3g"


lat=regionsDF.lat.mean()
lon=regionsDF.lon.mean()
jelbiArr=[[52.499258, 13.407773],
[52.554145, 13.416526],
[52.544389, 13.295859],
[52.529869, 13.449394],
[52.453640, 13.385650]]
jelbi=pd.DataFrame(jelbiArr,columns=['lat','lon'])
fig = go.Figure()
fig.add_trace(go.Scattermapbox(
                lat=regionsDF['lat'],
                lon=regionsDF['lon'],
                text=regionsDF['region_id'],
                mode='markers',     
                marker=go.scattermapbox.Marker(size=3),
                name='Regions polygon'))
fig.add_trace(go.Scattermapbox(
                lat=regions['lat'],
                lon=regions['lon'],
                mode='markers',     
                marker=go.scattermapbox.Marker(size=10),
                name='Center of regions'))

fig.add_trace(go.Scattermapbox(
                lat=jelbi['lat'],
                lon=jelbi['lon'],
                mode='markers',     
                marker=go.scattermapbox.Marker(size=10),
                name='Jelbi stations'))
for i in range(1,13):
    if i!=3:
        for k in [0,1]:
            if lineL[i][k][2]<0.4:
                linewidth=2
            elif lineL[i][k][2]<0.6:
                linewidth=4
            else:
                linewidth=6
                
            fig.add_trace(go.Scattermapbox(
                mode = "lines",
                lon = lineL[i][k][0],
                lat = lineL[i][k][1],
                line=dict(color='red',width=linewidth)))

fig.update_layout(
    showlegend=False,
    hovermode='closest',
    dragmode='zoom',
    height=1500,
    mapbox=go.layout.Mapbox(
        accesstoken=mapbox_access_token,
        bearing=0,
        center=go.layout.mapbox.Center(
            lat=lat,
            lon=lon
        ),
        pitch=0,
        zoom=10
    )
)
fig.show()